import axios from "axios";
import { tansParams } from "../utils/request";
// 初始化axios
const request = axios.create({
  timeout: 50000,
  baseURL: "http://localhost:3000",
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // get请求映射params参数
    if (config.method === "get" && config.params) {
      let url = config.url + "?" + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    // 防止重复提交 全局节流处理
    if (config.method === "post" || config.method === "put") {
      const requestObj = {
        url: config.url,
        data: typeof config.data === "object" ? JSON.stringify(config.data) : config.data,
        time: new Date().getTime(),
      };
      const sessionObj = sessionStorage.getItem("sessionObj");
      if (sessionObj === undefined || sessionObj === null || sessionObj === "") {
        sessionStorage.setItem("sessionObj", requestObj);
      } else {
        const s_url = sessionObj.url; // 请求地址
        const s_data = sessionObj.data; // 请求数据
        const s_time = sessionObj.time; // 请求时间
        const interval = 500; // 间隔时间(ms)，小于此时间视为重复提交
        if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
          return Promise.reject(new Error("数据正在处理，请勿重复提交"));
        } else {
          sessionStorage.setItem("sessionObj", requestObj);
        }
      }
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    console.log(res);
    var pattern = /\/user/;
    //  模拟登录错误的情况
    if (res.data.length === 0 && pattern.test(res.config.url)) {
      return Promise.reject("用户名或密码错误!");
    }
    // 如果是分页则模拟返回总数
    // if()
    // 其余情况都正常返回

    return res.data;
  },
  (error) => {
    return Promise.reject(error);
  }
);

export default request;
